               
To:    John Lohmeyer, Chairman X3T9.2

From:  Dan Davies
       Cipher Data Products

Subj:  Autosense Protocol

The currently defined protocol for the Autosense option specifies that the 
target perform the following sequence after the STATUS phase resulting in a 
CHECK CONDITION:

1) Issue AUTOSENSE DATA FOLLOWS message to the initiator;
2) Change to DATA IN phase and transfer autosense data;
3) Issue COMMAND COMPLETE message and go to BUS FREE phase.

This sequence of following a data phase with no status phase is contrary to 
any other information transfer in the SCSI architecture.  In particular, the 
method for reporting unrecoverable errors during the autosense data phase is 
limited to the unexpected BUS FREE error.  By mandating this protocol, a 
target design is required to have a unique handler for autosense data 
transmission (the same error in transmitting sense information during a 
REQUEST SENSE command would be handled with a CHECK CONDITION as specified on 
page 7-58).

To avoid this unnecessary complication in target design, the following 
proposal is suggested:

Change the wording in Section 6.6, on page 6-16, as follows:

1) Issue an AUTOSENSE DATA FOLLOWS message to the initiator;
2) Change to DATA IN phase and transfer the sense data to the initiator;
3) Change to STATUS phase and issue the appropriate status byte;
4) Issue a COMMAND COMPLETE message and go to BUS FREE phase.

Change the wording in Section 5.4, on page 5-15, as follows:

Two additional pointers are used when the autosense data option is 
implemented, known as the autosense data and status pointers.  These pointers, 
like the pointers described above, have both a current and a saved pointer.  
The saved autosense data pointer always points at the start of the autosense 
data area for the current command.  The saved autosense status pointer always 
points to the start of the autosense status area for the current command.  
When the target sends the AUTOSENSE DATA FOLLOWS message to the initiator, the 
initiator saves its current data and status pointers, and all subsequent DATA 
IN and STATUS phases shall use the autosense data and status pointers to point 
to the next autosense data or status byte to transfer to the initiator's 
memory.  The target may restore the current autosense data or status pointer 
to its saved value by sending a RESTORE POINTERS message.
